
package dropbox;

import error.ConfigFileNotFoundException;
import java.io.*;

public final class Config implements Serializable {

    private File configFile;    // File elérés útvonala
    private ConfigValues cfg;   // Beállítások étrékei

    // Konstruktor
    // @param path - útvonala az üzenetfile-oknak
    public Config(File path) throws IOException, ClassNotFoundException, ConfigFileNotFoundException {
        cfg = new ConfigValues();
        this.configFile = path;
        if (!this.configFile.exists()) {
            // default paraméterek
            cfg.messagePath = null;
            cfg.refreshInterval = 30000;
            cfg.autoLoginUsername = "";
            this.save();
        } else {
            // létező paraméterek
            this.load();
        }
    }

    // Üzeneteket tartalmazó file elérése
    public void setMessagePath(File path) throws IOException {
        if (path.exists() && path.canWrite() && path.canRead()) {
            cfg.messagePath = path;
            this.save();
        }
    }

    // File elérési útvonal
    public File getMessagePath() {
        return cfg.messagePath;
    }

    // Bejelentkeztető
    public void setAutoLoginUsername(String un) throws IOException {
        if (!un.contains(" ")) {
            cfg.autoLoginUsername = un;
            this.save();
        }
    }

    // Username lekérés
    public String getAutoLoginUsername() {
        return cfg.autoLoginUsername;
    }

     // Frissítési idő beállítás
    public void setRefreshInterval(long intv) throws IOException {
        cfg.refreshInterval = intv;
        this.save();

    }

    // Frissítési idő lekérés
    public long getRefreshInterval() {
        return cfg.refreshInterval;
    }

    // Serializálás
    private void save() throws IOException {
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(this.configFile.getCanonicalPath()));
        out.writeObject(cfg);
        out.close();
    }

    // kiolvasás a serializált fileból
    private void load() throws IOException, ClassNotFoundException, ConfigFileNotFoundException {
        try {
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(this.configFile));
            ConfigValues config;
            config = (ConfigValues) in.readObject();
            cfg.messagePath = config.messagePath;
            cfg.refreshInterval = config.refreshInterval;
            cfg.autoLoginUsername = config.autoLoginUsername;
            in.close();
        } catch (FileNotFoundException e) {
            throw new ConfigFileNotFoundException();
        }
    }

    /// Config private osztály
    private class ConfigValues implements Serializable {

        public File messagePath;
        public String autoLoginUsername;
        public long refreshInterval;
    }
}